<?php
/**
 * Contiene tutte le funzioni per la gestione delle sessioni
 *
 * @author mattevigo
 *
 * @project Sandro del Pistoia
 * @created 23/mar/2009
 */
require_once $_SERVER['DOCUMENT_ROOT']."/config.php";
require_once DB;
require_once SESSION;
require_once USER;

/**
 * Restituisce l'oggetto DB specifico per questa sessione,
 * se non esiste ancora un oggetto DB questo viene creato
 */
function get_session_db($db_config)
{
	$db = null;
	if(!isset($_SESSION['db']))
	{
		$db = new DB($db_config, SESSION_TIME);
		$_SESSION['db'] = serialize($db);
	}
	else {
		//echo $_SESSION['db']->toString();
		$db = unserialize($_SESSION['db']);
	}

	return $db;
}

/**
 * Restituisce l'oggetto User relativo all'utente loggato
 * Questa funzione non esegue controlli di consistenza, e' buona norma quindi chiamarla
 * dopo aver verificato l'esistenza di un utente loggato con user_is_logged()
 *
 * @return l'oggetto User relativo all'utente loggato
 */
function get_session_user()
{
	if(isset($_SESSION['user']))
		return unserialize($_SESSION['user']);
	else return null;
}

/**
 * Restituisce l'oggetto Session relativo alla sessione corrente
 *
 * @return l'oggetto Session relativo alla sessione corrente
 */
function get_session_data()
{
	if(isset($_SESSION['data']))
		return unserialize($_SESSION['data']);
	else return null;
}

/**
 * Fornisce informazioni sulla sessione corrente
 *
 * @return true se la sessione corrente e' autenticata
 * 			false altrimenti
 */
function user_is_logged($db)
{
	if(isset($_SESSION['uid']))
	{
		if(Session::validate($db, session_id(), $_SESSION['uid'], SESSION_TIME))
		{
			// viene aggiornato il valore di session_time
			$session = get_session_data();
			$session->set('session_time', time());
			$session->commit();
			$_SESSION['data'] = serialize($session);
			return true;
		}
		else
		{
			session_unset();
			session_regenerate_id();
			return false;
		}
	}
	else return false;
}
?>
